home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 1996 March / Amiga-CD 1996 #3.iso / pd-disketten / dms-gepackt / 1_96s / apd-1-96s-1-2.dms / apd-1-96s-1-2.adf / Relabel-Trick / Relabel.c < prev    next >
C/C++ Source or Header  |  1995-12-07  |  2KB  |  74 lines

  1. /* Relabel 1.0 -- © D. Göhler, E. Conrad 1995 */
  2.  
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <clib/exec_protos.h>
  6. #include <clib/alib_protos.h>
  7. #include <clib/dos_protos.h>
  8. #define BUFSIZE 300
  9.  
  10. /* Maxon C++ 3.0: mcppc3 -pc relabel.c -lamiga
  11.    SAS-C 6.x    : sc relabel.c LINK
  12.    DICE x.x     : dcc relabel.c         */
  13.  
  14. int relabel(int init, int count, char *argv[])
  15. {  char buf[BUFSIZE]; int lauf;
  16.  
  17.    strcpy (buf,"C:Relabel ");
  18.    for (lauf = init; count--; lauf++)
  19.    {  strcat(buf,argv[lauf]); strcat(buf," "); }
  20.    return (System(buf,0L) == DOSFALSE
  21.           ? RETURN_OK : RETURN_FAIL);
  22. }
  23.  
  24. char C_Array[] = "yaq12wsxcde34rfvbgt56zhnmju78ik,"
  25.                  ".lo90pö-äüßPLOIKMJUZHNBGTRFVCDEW";
  26.  
  27. ULONG hash(unsigned char *string)
  28. {  ULONG retcode = strlen(string);
  29.    while (*string)
  30.    {  retcode = (retcode * 29 + *string++) & 0xfffff; }
  31.    return retcode;
  32. }
  33.  
  34. void CalculateNew(char *oldpass, char *codename)
  35. {
  36.    unsigned int oldhash = hash(oldpass);
  37.    unsigned int codehash = hash(codename);
  38.    unsigned int index,i=0;
  39.    char newpass[10];
  40.  
  41.    srand(codehash);
  42.    while (i < 8)
  43.    {  index = (rand()*(oldhash+i) >> 3) % 64;
  44.       newpass[i++] = C_Array[index];
  45.    }
  46.    newpass[8] = '\0';
  47.    Printf("%s\n",newpass);
  48. }
  49.  
  50. void StripLF(char *name)
  51. {  char *p = name + strlen(name) - 1;
  52.    if (*p == '\n') *p = '\0';
  53. }
  54.  
  55. int main(int argc, char *argv[])
  56. {  if (argc > 1) // mit Parametern gestartet ...
  57.    {  relabel (1,argc-1,argv); }
  58.    else
  59.    {  char oldname[BUFSIZE],newname[BUFSIZE];
  60.       char *names[3] = {">NIL:",0,0};
  61.  
  62.       names[1] = oldname; names[2] = newname;
  63.       Flush(Output()); Flush(Input()); // leider nötig
  64.       FPuts(Output(),"Alter Name des Datenträgers: ");
  65.       Flush(Output()); FGets(Input(),oldname,BUFSIZE-2);
  66.       FPuts(Output(),"Neuer Name des Datenträgers: ");
  67.       Flush(Output()); FGets(Input(),newname,BUFSIZE-2);
  68.       StripLF(oldname); StripLF(newname);
  69.       if (relabel(0,3,names) == RETURN_FAIL)
  70.       {  CalculateNew(oldname,newname);  }
  71.    }
  72.    return RETURN_OK;
  73. }
  74.